package br.com.sgs.dao;

import br.com.sgs.entity.Aluno;
import br.com.sgs.entity.Funcionario;
import br.com.sgs.entity.Instituicao;
import br.com.sgs.entity.Usuario;
import br.com.sgs.util.UtilHibernate;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class DAOUsuario implements IDAOUsuario {

    EntityManager em;

    public DAOUsuario() {
        em = UtilHibernate.getEM();
    }

    @Override
    public Usuario autenticacao(String login, String senha, Instituicao instituicao) {
        try {

            Query q = em.createQuery("SELECT u FROM Usuario u WHERE u.login = :login AND u.senha = :senha AND u.instituicao = : instituicao");

            q.setParameter("login", login);
            q.setParameter("senha", senha);
            q.setParameter("instituicao", instituicao);

            return (Usuario) q.getSingleResult();

        } catch (Exception e) {
            System.err.println("Erro no autenticacao");
            return null;
        }
    }

    @Override
    public Funcionario autenticacaoFunc(String login, String senha, Instituicao instituicao) {
        try {

            Query q = em.createQuery("SELECT f FROM Funcionario f WHERE f.login = :login AND f.senha = :senha AND f.instituicao = :instituicao");

            q.setParameter("login", login);
            q.setParameter("senha", senha);
            q.setParameter("instituicao", instituicao);

            return (Funcionario) q.getSingleResult();

        } catch (Exception e) {
            System.err.println("Erro no autenticacaoFunc");
            e.printStackTrace();
            return null;
        }
    }
    
    @Override
    public Aluno autenticacaoAluno(String login, String senha, Instituicao instituicao) {
        try {

            Query q = em.createQuery("SELECT a FROM Aluno a WHERE a.login = :login AND a.senha = :senha AND a.instituicao = :instituicao");

            q.setParameter("login", login);
            q.setParameter("senha", senha);
            q.setParameter("instituicao", instituicao);

            return (Aluno) q.getSingleResult();

        } catch (Exception e) {
            System.err.println("Erro no autenticacaoAluno");
            e.printStackTrace();
            return null;
        }
    }
}
